﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 坦克大战.Properties;

namespace 坦克大战
{
    enum Tag
    {
        我的坦克,
        敌人坦克
    }
    class 子弹:移动物体
    {
        public bool 是否销毁 { get; set; }
        public Tag Tag { get; set; }
        public 子弹(int x, int y, int 速度,方向 方向,Tag tag)
        {
            是否销毁 = false;
            this.X = x;
            this.Y = y;
            this.I速度 = 速度;
            B上 = Resources.BulletUp;
            B下 = Resources.BulletDown;
            B右 = Resources.BulletRight;
            B左 = Resources.BulletLeft;
            this.F方向 = 方向;
            this.Tag = tag;

            X -= i宽 / 2;
            Y -= i高 / 2;



        }
        public void 移动()
        {

            switch (F方向)
            {
                case 方向.上:
                    Y -= I速度;
                    break;
                case 方向.下:
                    Y += I速度;
                    break;
                case 方向.左:
                    X -= I速度;
                    break;
                case 方向.右:
                    X += I速度;
                    break;

            }
        }
        public void 移动检查()
        {
            #region 边界检测
            if (F方向 == 方向.上)
            {
                if (Y+i高/2+3 < 0)
                {
                    是否销毁 = true;
                    return;
                }
            }
            else if (F方向 == 方向.下)
            {
                if (Y + i高 / 2 - 3 > 450)
                {
                    是否销毁 = true;
                    return;
                }
            }
            else if (F方向 == 方向.左)
            {
                if (X + i宽 / 2 + 3 < 0)
                {
                    是否销毁 = true;
                    return;
                }
            }
            else if (F方向 == 方向.右)
            {
                if (X + i宽 / 2 - 3 > 450)
                {
                    是否销毁 = true;
                    return;
                }
            }

            #endregion
            Rectangle r = 获得矩形();
            r.X = X + i宽 / 2 - 4;
            r.Y = Y + i高 / 2 - 4;
            r.Width = 8;
            r.Height = 8;

            switch (F方向)
            {
                case 方向.上:
                    r.Y -= I速度;
                    break;
                case 方向.下:
                    r.Y += I速度;
                    break;
                case 方向.左:
                    r.X -= I速度;
                    break;
                case 方向.右:
                    r.X += I速度;
                    break;
                default:
                    break;
            }

            int x爆炸位置 = this.X + i宽 / 2;
            int y爆炸位置 = this.Y + i高 / 2;





            不移动物体 墙 = null;
            if ((墙 =游戏管理者.是否碰撞墙(r)) != null)
            {
                if (Tag == Tag.我的坦克)
                {
                    游戏音效.播放爆炸音效();
                }
               
                是否销毁 = true;
                游戏管理者.销毁墙(墙);
                游戏管理者.创建爆炸(x爆炸位置, y爆炸位置);
                return;
            }
            if (游戏管理者.是否碰撞钢铁(r) != null)
            {
                if (Tag == Tag.我的坦克)
                {
                    游戏音效.播放爆炸音效();
                }
                游戏管理者.创建爆炸(x爆炸位置, y爆炸位置);
                是否销毁 = true;
                return;
            }
            if (游戏管理者.是否碰撞boss(r))
            {
                游戏管理者.创建爆炸(x爆炸位置, y爆炸位置);
                游戏框架.改变为结束状态();
                return;
            }

            if (Tag == Tag.我的坦克)
            {
                敌人坦克 d = null;
                if ((d = 游戏管理者.是否碰撞敌人(r)) != null)
                {
                    游戏管理者.创建爆炸(x爆炸位置, y爆炸位置);
                    是否销毁 = true;
                    游戏管理者.销毁敌人坦克(d);
                    游戏音效.播放add音效();
                    return;
                }
            }
            else if (Tag == Tag.敌人坦克)
            {
                我的坦克 w = null;
                if ((w = 游戏管理者.是否碰撞我的坦克(r)) != null)
                {
                    游戏管理者.创建爆炸(x爆炸位置, y爆炸位置);
                    是否销毁 = true;
                    w.受伤();
                    游戏音效.播放hit音效();
                    return;
                }
            }

        }
        public void 改变朝向()
        {

        }
        public override void Update()
        {
            移动检查();
            移动();
            base.Update();

        }
    }
}
